package com.chengshuang.log.service;

import com.chengshuang.log.factory.FunctionFactory;
import com.chengshuang.log.fuction.LogRecordFunction;
import org.springframework.stereotype.Service;

/**
 * 自定义函数Service
 *
 * @author shuang.cheng
 * @date 2022/10/14
 */
@Service
public class FunctionService {

    /**
     * 指定在业务方法之前执行的自定义函数
     *
     * @param functionName 自定义函数名称
     * @param value 参数
     * @return 返回值
     */
    public String executeBeforeFunction(String functionName, Object value) {
        LogRecordFunction function = FunctionFactory.getBeforeFunction(functionName);
        return apply(function, value);
    }

    /**
     * 指定在业务方法之后执行的自定义函数
     *
     * @param functionName 自定义函数名称
     * @param value 参数
     * @return 返回值
     */
    public String executeAfterFunction(String functionName, Object value) {
        LogRecordFunction function = FunctionFactory.getAfterFunction(functionName);
        return apply(function, value);
    }

    private String apply(LogRecordFunction function, Object value) {
        if (function == null) {
            return null;
        }
        // 指定方法
        return  function.apply(value);
    }
}
